/**
 * Copyright (c) 2007,中企动力华南研发中心
 * All rights reserved.
 */
package com.ce.pms.house.service;

import java.util.List;

import com.ce.pms.base.service.IPmsBaseService;
import com.ce.pms.customer.model.OrganizationDO;
import com.ce.pms.house.model.CoWorkerDomain;
import com.ce.pms.house.vo.CoWorkerVO;
import com.sitechasia.webx.core.support.Page;

/**
 * 功能描述：协作伙伴服务层
 * @author 罗军林 创建日期：2008-6-30
 */
public interface ICoWorkerService extends IPmsBaseService{
	/**
	 * 功能描述:增加一个协作伙伴。如果必填项有一项为空将会抛出业务异常<br>
	 * 		  必填值：creator（创建人），coworkerTypeCode(协作伙伴类型Code),coworkerTypeValue(协作伙伴value),name（组织名称）
	 * @param coWorkerVO
	 * @return
	 * Create author:罗军林
	 * Create on:2008-6-30
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public CoWorkerDomain addCoWorker(CoWorkerVO coWorkerVO);

	/**
	 * 功能描述:根据id删除一个协作伙伴，此处id为协作伙伴表（CS_CO_WORKER）的ID,如果ID为null将抛出异常
	 * @param id
	 * Create author:罗军林
	 * Create on:2008-6-30
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public void deleteCoWorkerByID(Long id);

	/**
	 * 功能描述:修改协作伙伴,这里是根据协作伙伴ID进行修改<br>
	 * 必填值：coWorkerID(协作伙伴ID)，creator（修改人），coworkerTypeCode(协作伙伴类型Code),coworkerTypeValue(协作伙伴value),name（组织名称）<br>
	 * @param coWorkerVO
	 * @return
	 * Create author:罗军林
	 * Create on:2008-6-30
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public CoWorkerDomain editCoWorker(CoWorkerVO coWorkerVO);

	/**
	 * 功能描述:根据协作伙伴ID查询得到一个协作伙伴对象
	 * @param id
	 * @return
	 * Create author:罗军林
	 * Create on:2008-7-1
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public CoWorkerVO findCoWorkerByID(Long id);

	/**
	 * 功能描述:根据queryCondition条件查询所有记录<br>
	 * 必选项：组织类型code，组织类型value,协作伙伴类型CODE，协作类型value<br>
	 * 用到的数据表CS_CO_WORKER,CS_PARTICIPANT_ROLE,CS_PARTICIPANT,CS_ORGANIZATION<br>
	 * @param queryCondition 查询条件
	 * @param pageNo
	 * @param pageSize
	 * @return
	 * Create author:罗军林
	 * Create on:2008-6-30
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public Page queryCoWorker(CoWorkerVO queryCondition,int pageNo,int pageSize);

	/**
	 * 功能描述:根据组织名字，组织类型code，组织类型value,协作伙伴类型CODE，协作类型value查询统计记录数<br>
	 * 注：新建判断name的唯一性时，oldName传为null；修改判断name的唯一性时，则需要传入修改前的名字<br>
	 * 用到的数据表CS_CO_WORKER,CS_PARTICIPANT_ROLE,CS_PARTICIPANT,CS_ORGANIZATION
	 * @param queryCondition
	 * @param oldName 修改前的名字
	 * @return
	 * Create author:罗军林
	 * Create on:2008-7-2
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public Long countCoWorkerByName(CoWorkerVO queryCondition,String oldName);

	/**
	 * 功能描述:根据协作伙伴类型CODE，协作类型value,参与人ID查询统计记录数<br>
	 * 用到的数据表CS_PARTICIPANT_ROLE,CS_CO_WORKER
	 * @param queryCondition
	 * @return
	 * Create author:罗军林<br>
	 * Create on:2008-7-4<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public Long countCoWorkerByParticipantId(CoWorkerVO queryCondition);

	/**
	 * 功能描述:根据提供的coWorkerDomain返回一个CoWorkerVO<br>;
	 * 原因：因CoWorkerVO中的数据是由coWorkerDomain、organizationDO两个类构成，
	 * 本方法将根据coWorkerDomain中的参与人ID查询得出organizationDO数据,于以合
	 * 成，并返回CoWorkerVO。
	 * 注：coWorkerDomain中的参与ID必须存在，否则将返回NULL
	 * @param coWorkerDomain
	 * @return
	 * Create author:罗军林
	 * Create on:2008-7-2
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public CoWorkerVO getCoWorkerVOByCoWorkerDomain(CoWorkerDomain coWorkerDomain);

	/**
	 * 功能描述:根据协作伙伴类型查询所有记录,这里为不分页查询<br>
	 * 必选项：协作伙伴类型CODE，协作类型value<br>
	 * 可选项：coWorkerIDs，此字段为协作伙伴ID集，格式形如：1,2,3；
	 *       如果此选项按规则设置了，含有这些ID的将不在结果集中，且必有按规则组织，否则将报错<br>
	 * 用到的数据表CS_CO_WORKER,CS_PARTICIPANT_ROLE,CS_PARTICIPANT,CS_ORGANIZATION<br>
	 * @param queryCondition
	 * @return
	 * Create author:罗军林<br>
	 * Create on:2008-7-8<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public List queryAllCoWorkerByCoWorkerType(CoWorkerVO queryCondition);
}
